﻿Imports System.Data.SqlClient

Public Class frmNomina
    Dim Infonavit(2000) As Integer
    Dim Fonacot(2000) As Integer
    Dim Nom As New clsNominaGeneral
    Dim Gen As New clsNominaDetalle
    Dim Info As New clsAbonosInfonavit
    Dim Fona As New clsAbonosFonacot
    Dim Mov As New clsMovimientos
    Dim Nomi As Integer
    Dim Acum As New clsSueldosAcumulados
    Dim Guardado As Boolean
    Dim PuedeContinuar As Boolean


    Private Sub frmNomina_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        If Guardado = False Then
            BorrarAcumulados()
        End If
    End Sub
    Private Sub FinDeEdicion(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgNomina.CellEndEdit

        Dim Sueldo As Double = 0
        Dim SueldoNomina As Double = 0
        Dim dias As Integer = 0


        Dim DiferenciaSueldo As Double = 0
        'Variables para obtener precio
        
        'Variables globales para percepciones
        Dim SM_Zona_A As Double = BuscarDblDatoCitra("SELECT MONTO FROM SalariosMinimos WHERE ZONA='A'")
        Dim SM_Zona_C As Double = BuscarDblDatoCitra("SELECT MONTO FROM SalariosMinimos WHERE ZONA='C'")
        Dim SueldoDiario As Double = 223.19
        Dim Despensa As Double = 0
        Dim Total_Percepciones As Double = 0
        Dim Horas_Extras As Double = 0
        Dim CalculoExtras As Double = 0
        Dim Deporte As Double = 0
        Dim Puntualidad As Double = 0
        Dim Asistencia As Double = 0
        Dim Gratificacion As Double = 0

        'Variables para deducciones
        Dim BaseGravada As Double
        Dim LimInferior As Double
        Dim ExcLimInf As Double
        Dim PorcenLimInfe As Double
        Dim ImptoMarginal As Double
        Dim CuotaFija As Double
        Dim Cesantia As Double
        Dim Excedente38mf As Double = 27.9599
        Dim ImpRetener As Double
        Dim Impto As Double
        Dim Imss As Double
        Dim Invalidez As Double
        Dim Maternidad As Double
        Dim Medicos As Double
        Dim Subsidio As Double
        Dim PrestacionDinero As Double
        Dim PrestacionEspecie As Double
        Dim SDI As Double = 216.13
        Dim TotalDeducciones As Double = 0
        Dim TotalNeto As Double = 0
        Dim CargoBimestre As Double = 0
        Dim AbonoBimestre As Double = 0
        Dim RestaBimestre As Double = 0
        Dim DescuentoInfonavit As Double = 0
        Dim Porcentaje As Decimal = 0
        Dim DeduccionesVerificar As Double = 0
        Dim CargoMes As Double = 0
        Dim AbonoMes As Double = 0
        Dim RestaMes As Double = 0
        Dim DescuentoFonacot As Double = 0
        Dim TotalColumnas As Integer = dgNomina.Columns.Count
        Dim DescuentoDinamico As Integer = 0
        Dim MontoDescontado As Double = 0
        Dim FechaLiquidacion As Date = Now.AddDays(10)
        Dim FechaLiquidacionFormateada As String = ""
        Dim IDEmpleado As Integer = 0
        Dim CodigoEmpleado As String = 0
        Dim Tarjeta As Double
        Dim UltimoPeriodo As Integer = 0
        Dim IdFona As Integer = 0
        Dim IdInfo As Integer = 0

        IDEmpleado = dgNomina.CurrentRow.Cells(0).Value
        dias = dgNomina.CurrentRow.Cells(4).Value

        Dim DiasDescontarInfonavit As Decimal = 0
        Dim DiasDescontarFonacot As Decimal = 0
        'Prepara dias a descontar de Infonavit*******************************************************************************************
        Dim IdTipoPeriodo As Integer = BuscarIntDatoNominas("NOM10023", "IdTipoPeriodo", "NombreTipoPeriodo='" & lstPeriodos.Text.Trim & "'")
        Dim PeriodoInicialInfonavit As Integer = BuscarIntDatoCitra("PeriodoInfonavit", "Del", "Bimestre=" & txtInfonavit.Text & " AND Anio=" & txtAnio.Text)
        Dim PeriodoFinalInfonavit As Integer = BuscarIntDatoCitra("PeriodoInfonavit", "Al", "Bimestre=" & txtInfonavit.Text & " AND Anio=" & txtAnio.Text)
        Dim FechaInicialPeriodoInfFon As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & txtNomina.Text)
        If txtNomina.Text >= PeriodoInicialInfonavit And txtNomina.Text <= PeriodoFinalInfonavit Then
            Dim FechaInicialInfonavit As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoInicialInfonavit)
            Dim FechaFinalInfonavit As Date = BuscarDateDatoNominas("SELECT FechaFin FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoFinalInfonavit)
            Dim DiasTotalesDescuentoInf As Integer = DateDiff(DateInterval.Day, FechaInicialInfonavit, FechaFinalInfonavit)
            Dim DiasRestantesInfonavit As Integer = DateDiff(DateInterval.Day, FechaInicialPeriodoInfFon, FechaFinalInfonavit)
            DiasDescontarInfonavit = (DiasRestantesInfonavit * 35) / DiasTotalesDescuentoInf
        Else
            DiasDescontarInfonavit = 0
        End If


        'Prepara dias a descontar de fonacot********************************************************************************************
        Dim PeriodoInicialFonacot = BuscarIntDatoCitra("PeriodoFonacot", "Del", "Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)
        Dim PeriodoFinalFonacot = BuscarIntDatoCitra("PeriodoFonacot", "Al", "Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)
        If txtNomina.Text >= PeriodoInicialFonacot And txtNomina.Text <= PeriodoFinalFonacot Then
            Dim FechaInicialFonacot As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoInicialFonacot)
            Dim FechaFinalFonacot As Date = BuscarDateDatoNominas("SELECT FechaFin FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoFinalFonacot)
            Dim DiasTotalesDescuentoFon As Integer = DateDiff(DateInterval.Day, FechaInicialFonacot, FechaFinalFonacot)
            Dim DiasRestantesFonacot As Integer = DateDiff(DateInterval.Day, FechaInicialPeriodoInfFon, FechaFinalFonacot)
            DiasDescontarFonacot = (DiasRestantesFonacot * 15) / DiasTotalesDescuentoFon
        Else
            DiasDescontarFonacot = 0
        End If

        If dgNomina.CurrentCell.ColumnIndex = 3 Then
            dgNomina.EndEdit()
            
            Sueldo = dgNomina.CurrentRow.Cells(3).Value
            SueldoNomina = SueldoDiario * dias
            If Sueldo <= SueldoDiario Then
                SueldoNomina = Sueldo
            ElseIf SueldoNomina > Sueldo Then
                SueldoNomina = Sueldo
            End If
            DiferenciaSueldo = Sueldo - SueldoNomina
            'Calcula Despensa***********************************
            Despensa = (SM_Zona_A * 0.4) * 7
            If DiferenciaSueldo < Despensa Then
                Despensa = DiferenciaSueldo
            ElseIf Despensa > DiferenciaSueldo Then
                Despensa = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa)
            'Calcula Horas Extras*******************************
            CalculoExtras = ((((SM_Zona_A * 3.5) / 8) * 2) * 9)
            If CalculoExtras < (SM_Zona_C * 5) Then
                Horas_Extras = CalculoExtras
            Else
                Horas_Extras = SM_Zona_C * 5
            End If
            If DiferenciaSueldo < Horas_Extras Then
                Horas_Extras = DiferenciaSueldo
            ElseIf Horas_Extras > DiferenciaSueldo Then
                Horas_Extras = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras)
            'Calcula Deporte y Cultura**************************
            Deporte = SueldoNomina * 0.1
            If DiferenciaSueldo < Deporte Then
                Deporte = DiferenciaSueldo
            ElseIf Deporte > DiferenciaSueldo Then
                Deporte = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte)
            'Calcula premio de puntualidad**********************
            Puntualidad = SueldoNomina * 0.1
            If DiferenciaSueldo < Puntualidad Then
                Puntualidad = DiferenciaSueldo
            ElseIf Puntualidad > DiferenciaSueldo Then
                Puntualidad = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad)
            'Calcula premio de asistencia**********************
            Asistencia = SueldoNomina * 0.1
            If DiferenciaSueldo < Asistencia Then
                Asistencia = DiferenciaSueldo
            ElseIf Asistencia > DiferenciaSueldo Then
                Asistencia = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia)
            'Calcula gratificacion*****************************
            Gratificacion = DiferenciaSueldo
            Total_Percepciones = SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia + Gratificacion

            'Muestra valores*******************************************************************************************************

            '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

            'Calcula Tarjeta*****************************************
            Tarjeta = 10 * dias
            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)

           'Calcula Infonavit*****************************************

           
            If DiasDescontarInfonavit > 0 Then
                CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                AbonoBimestre = Infonavit(IDEmpleado)
                RestaBimestre = CargoBimestre - AbonoBimestre
                If RestaBimestre > 0 Then
                    'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoInfonavit = (RestaBimestre / DiasDescontarInfonavit) * dias '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                    If DescuentoInfonavit > RestaBimestre Then
                        DescuentoInfonavit = RestaBimestre
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                        If DescuentoInfonavit < 0 Then
                            DescuentoInfonavit = 0
                        End If
                    End If
                Else
                    DescuentoInfonavit = 0
                End If
            End If
           
            If DiasDescontarFonacot > 0 Then
                'Calcula Fonacot******************************************
                CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CARGOSfONACOT WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                AbonoMes = Fonacot(IDEmpleado)
                RestaMes = CargoMes - AbonoMes
                UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)

                If RestaMes > 0 Then
                    'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                    If DescuentoFonacot > RestaMes Then
                        DescuentoFonacot = RestaMes
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        If DescuentoFonacot > 0 Then
                            DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                        End If
                        If DescuentoFonacot < 0 Then
                            DescuentoFonacot = 0
                        End If
                    End If

                Else
                    DescuentoFonacot = 0
                End If

            End If

           

            'Imprime valores de columnas fijas*****************************************************
            dgNomina.CurrentRow.Cells(5).Value = SueldoNomina
            dgNomina.CurrentRow.Cells(6).Value = Despensa
            dgNomina.CurrentRow.Cells(7).Value = Horas_Extras
            dgNomina.CurrentRow.Cells(8).Value = Deporte
            dgNomina.CurrentRow.Cells(9).Value = Puntualidad
            dgNomina.CurrentRow.Cells(10).Value = Asistencia
            dgNomina.CurrentRow.Cells(11).Value = Gratificacion
            dgNomina.CurrentRow.Cells(12).Value = Total_Percepciones
            dgNomina.CurrentRow.Cells(13).Value = ImpRetener
            dgNomina.CurrentRow.Cells(14).Value = Tarjeta
            dgNomina.CurrentRow.Cells(15).Value = DescuentoInfonavit
            dgNomina.CurrentRow.Cells(16).Value = DescuentoFonacot
            Application.DoEvents()

            'Calcula descuentos dinamicos*****************************************************
            MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
            If TotalColumnas > 19 Then
                For i = 17 To dgNomina.Columns.Count - 3
                    DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                    DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoDinamico = Porcentaje - MontoDescontado
                        If DescuentoDinamico < 0 Then
                            DescuentoDinamico = 0
                        End If
                    End If
                    MontoDescontado = MontoDescontado + DescuentoDinamico
                    dgNomina.CurrentRow.Cells(i).Value = DescuentoDinamico
                    DescuentoDinamico = 0
                Next
            End If

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0
            FechaLiquidacion = Now.AddDays(10)
            FechaLiquidacionFormateada = ""
            UltimoPeriodo = 0
            dgNomina.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            dgNomina.Columns(3).DefaultCellStyle.Format = "N2"
        ElseIf dgNomina.CurrentCell.ColumnIndex = 14 Then
            '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////
            dgNomina.EndEdit()
            'Calcula Tarjeta*****************************************
            Total_Percepciones = dgNomina.CurrentRow.Cells(12).Value
            Tarjeta = dgNomina.CurrentRow.Cells(14).Value
            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)

            'Calcula Infonavit*****************************************


            If DiasDescontarInfonavit > 0 Then
                CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                AbonoBimestre = Infonavit(IDEmpleado)
                RestaBimestre = CargoBimestre - AbonoBimestre
                If RestaBimestre > 0 Then
                    'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoInfonavit = (RestaBimestre / DiasDescontarInfonavit) * dias '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                    If DescuentoInfonavit > RestaBimestre Then
                        DescuentoInfonavit = RestaBimestre
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                        If DescuentoInfonavit < 0 Then
                            DescuentoInfonavit = 0
                        End If
                    End If
                Else
                    DescuentoInfonavit = 0
                End If
            End If

            If DiasDescontarFonacot > 0 Then
                'Calcula Fonacot******************************************
                CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                AbonoMes = Fonacot(IDEmpleado)
                RestaMes = CargoMes - AbonoMes
                UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE MES=" & txtFonacot.Text & " AND ANIO=" & txtAnio.Text)

                If RestaMes > 0 Then
                    'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                    If DescuentoFonacot > RestaMes Then
                        DescuentoFonacot = RestaMes
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        If DescuentoFonacot > 0 Then
                            DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                        End If
                        If DescuentoFonacot < 0 Then
                            DescuentoFonacot = 0
                        End If
                    End If

                Else
                    DescuentoFonacot = 0
                End If

            End If

            'Imprime valores de columnas fijas*****************************************************

            dgNomina.CurrentRow.Cells(15).Value = DescuentoInfonavit
            dgNomina.CurrentRow.Cells(16).Value = DescuentoFonacot
            Application.DoEvents()

            'Calcula descuentos dinamicos*****************************************************
            MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
            If TotalColumnas > 19 Then
                For i = 17 To dgNomina.Columns.Count - 3
                    DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                    DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoDinamico = Porcentaje - MontoDescontado
                        If DescuentoDinamico < 0 Then
                            DescuentoDinamico = 0
                        End If
                    End If
                    MontoDescontado = MontoDescontado + DescuentoDinamico
                    dgNomina.CurrentRow.Cells(i).Value = DescuentoDinamico
                    DescuentoDinamico = 0
                Next
            End If

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0
            FechaLiquidacion = Now.AddDays(10)
            FechaLiquidacionFormateada = ""
            UltimoPeriodo = 0
        ElseIf dgNomina.CurrentCell.ColumnIndex = 15 Then
            dgNomina.EndEdit()
            Total_Percepciones = dgNomina.CurrentRow.Cells(12).Value
            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
            Tarjeta = dgNomina.CurrentRow.Cells(14).Value
            'Calcula Infonavit*****************************************
            'Calcula Infonavit*****************************************

            If DiasDescontarInfonavit > 0 Then


                CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                AbonoBimestre = Infonavit(IDEmpleado)
                RestaBimestre = CargoBimestre - AbonoBimestre
                If RestaBimestre > 0 Then
                    'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoInfonavit = dgNomina.CurrentRow.Cells(15).Value '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                    If DescuentoInfonavit > RestaBimestre Then
                        DescuentoInfonavit = RestaBimestre
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                        If DescuentoInfonavit < 0 Then
                            DescuentoInfonavit = 0
                        End If
                    End If
                Else
                    DescuentoInfonavit = 0
                End If
            End If


            If DiasDescontarFonacot > 0 Then
                'Calcula Fonacot******************************************
                CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                AbonoMes = Fonacot(IDEmpleado)
                RestaMes = CargoMes - AbonoMes
                UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE MES=" & txtFonacot.Text & " AND ANIO=" & txtAnio.Text)

                If RestaMes > 0 Then
                    'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                    If DescuentoFonacot > RestaMes Then
                        DescuentoFonacot = RestaMes
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        If DescuentoFonacot > 0 Then
                            DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                        End If
                        If DescuentoFonacot < 0 Then
                            DescuentoFonacot = 0
                        End If
                    End If

                Else
                    DescuentoFonacot = 0
                End If

            End If

            'Imprime valores de columnas fijas*****************************************************
            dgNomina.CurrentRow.Cells(15).Value = DescuentoInfonavit
            dgNomina.CurrentRow.Cells(16).Value = DescuentoFonacot
            Application.DoEvents()

            'Calcula descuentos dinamicos*****************************************************
            MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
            If TotalColumnas > 19 Then
                For i = 17 To dgNomina.Columns.Count - 3
                    DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                    DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoDinamico = Porcentaje - MontoDescontado
                        If DescuentoDinamico < 0 Then
                            DescuentoDinamico = 0
                        End If
                    End If
                    MontoDescontado = MontoDescontado + DescuentoDinamico
                    dgNomina.CurrentRow.Cells(i).Value = DescuentoDinamico
                    DescuentoDinamico = 0
                Next
            End If

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0
            FechaLiquidacion = Now.AddDays(10)
            FechaLiquidacionFormateada = ""
            UltimoPeriodo = 0
        ElseIf dgNomina.CurrentCell.ColumnIndex = 16 Then
            dgNomina.EndEdit()
            Total_Percepciones = dgNomina.CurrentRow.Cells(12).Value
            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
            Tarjeta = dgNomina.CurrentRow.Cells(14).Value
            DescuentoInfonavit = dgNomina.CurrentRow.Cells(15).Value
            'Calcula Fonacot******************************************
            'Calcula Fonacot******************************************
            CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
            AbonoMes = Fonacot(IDEmpleado)
            RestaMes = CargoMes - AbonoMes
            UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE MES=" & txtFonacot.Text & " AND ANIO=" & txtAnio.Text)

            If DiasDescontarFonacot > 0 Then
                If RestaMes > 0 Then
                    'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                    DescuentoFonacot = dgNomina.CurrentRow.Cells(16).Value '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                    If DescuentoFonacot > RestaMes Then
                        DescuentoFonacot = RestaMes
                    End If
                    DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                    If DeduccionesVerificar > Porcentaje Then
                        If DescuentoFonacot > 0 Then
                            DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                        End If
                        If DescuentoFonacot < 0 Then
                            DescuentoFonacot = 0
                        End If
                    End If

                Else
                    DescuentoFonacot = 0
                End If
            End If
            'Imprime valores de columnas fijas*****************************************************
            dgNomina.CurrentRow.Cells(16).Value = DescuentoFonacot
            Application.DoEvents()

            'Calcula descuentos dinamicos*****************************************************
            MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
            If TotalColumnas > 19 Then
                For i = 17 To dgNomina.Columns.Count - 3
                    DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                    DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoDinamico = Porcentaje - MontoDescontado
                        If DescuentoDinamico < 0 Then
                            DescuentoDinamico = 0
                        End If
                    End If
                    MontoDescontado = MontoDescontado + DescuentoDinamico
                    dgNomina.CurrentRow.Cells(i).Value = DescuentoDinamico
                    DescuentoDinamico = 0
                Next
            End If

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0
            FechaLiquidacion = Now.AddDays(10)
            FechaLiquidacionFormateada = ""
            UltimoPeriodo = 0
        ElseIf dgNomina.CurrentCell.ColumnIndex > 16 Then
            dgNomina.EndEdit()
            MontoDescontado = 0
            Total_Percepciones = dgNomina.CurrentRow.Cells(12).Value
            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
            Tarjeta = dgNomina.CurrentRow.Cells(14).Value
            DescuentoInfonavit = dgNomina.CurrentRow.Cells(15).Value
            DescuentoFonacot = dgNomina.CurrentRow.Cells(16).Value

            'Calcula descuentos dinamicos*****************************************************
            Dim i As Integer = 0
            For i = 13 To dgNomina.CurrentCell.ColumnIndex
                MontoDescontado = MontoDescontado + dgNomina.CurrentRow.Cells(i).Value
            Next
            DescuentoDinamico = dgNomina.CurrentRow.Cells(dgNomina.CurrentCell.ColumnIndex).Value
            DeduccionesVerificar = MontoDescontado + DescuentoDinamico
            If DeduccionesVerificar > Porcentaje Then
                DescuentoDinamico = Porcentaje - MontoDescontado
                If DescuentoDinamico < 0 Then
                    DescuentoDinamico = 0
                End If
            End If
            'dgNomina.CurrentRow.Cells(i).Value = DescuentoDinamico
            dgNomina.CurrentRow.Cells(dgNomina.CurrentCell.ColumnIndex).Value = DescuentoDinamico

            DescuentoDinamico = 0
            MontoDescontado = 0
            For i = 13 To dgNomina.Columns.Count - 3
                MontoDescontado = MontoDescontado + dgNomina.CurrentRow.Cells(i).Value
            Next

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            dgNomina.CurrentRow.Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0
            FechaLiquidacion = Now.AddDays(10)
            FechaLiquidacionFormateada = ""
            UltimoPeriodo = 0
        End If
    End Sub
    Private Sub frmNomina_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        dgNomina.Visible = False
        ToolStrip1.Cursor = Cursors.Hand
        ToolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System

        If NominaNueva = True Then
            txtFolio.Text = (BuscarIntDatoCitra("SELECT MAX(IdNomina) as Id FROM NominaGeneral")) + 1
        Else
            txtFolio.Text = IDNomina
        End If
        Periodos()

        PuedeContinuar = False

        lblStatus.Text = "Preparado para calcular..."
        Application.DoEvents()
        Guardado = False

    End Sub
    Sub BorrarAcumulados()
        Dim Folio As Integer = txtFolio.Text
        Call SetSqlCitra("DELETE FROM SueldosAcumulados WHERE Folio=" & Folio)
    End Sub
    Sub PreparaGrid()
        lblStatus.Text = "Preparando tablas..."
        Application.DoEvents()

        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "Select * FROM Adeudos WHERE idAdeudo>5 ORDER BY Prioridad"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Dim I As Integer

        dgNomina.Columns(1).ReadOnly = True
        dgNomina.Columns(2).ReadOnly = True
        dgNomina.Columns(3).ReadOnly = False
        dgNomina.Columns(4).ReadOnly = True
        dgNomina.Columns(5).ReadOnly = True
        dgNomina.Columns(6).ReadOnly = True
        dgNomina.Columns(7).ReadOnly = True
        dgNomina.Columns(8).ReadOnly = True
        dgNomina.Columns(9).ReadOnly = True
        dgNomina.Columns(10).ReadOnly = True
        dgNomina.Columns(11).ReadOnly = True
        dgNomina.Columns(12).ReadOnly = True
        dgNomina.Columns(14).ReadOnly = False
        dgNomina.Columns(15).ReadOnly = False

        For I = 3 To dgNomina.Columns.Count - 1
            dgNomina.Columns(I).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            dgNomina.Columns(I).DefaultCellStyle.Format = "N2"
        Next
        dgNomina.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgNomina.Columns(4).DefaultCellStyle.Format = "N0"

        I = 17
        Do While rdBuscar.Read()
            dgNomina.Columns.Add("Col" & I, rdBuscar("Nombre").ToString.Trim)
            dgNomina.Columns(I).Width = 80
            dgNomina.Columns(I).ReadOnly = False
            dgNomina.Columns(I).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            dgNomina.Columns(I).DefaultCellStyle.Format = "N2"
            I = I + 1
        Loop
        dgNomina.Columns.Add("Col" & I, "Total Deducciones")
        dgNomina.Columns(I).Width = 80
        dgNomina.Columns(I).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgNomina.Columns(I).DefaultCellStyle.Format = "N2"
        dgNomina.Columns(I).ReadOnly = True
        I = I + 1
        dgNomina.Columns.Add("Col" & I, "Total")
        dgNomina.Columns(I).Width = 80
        dgNomina.Columns(I).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgNomina.Columns(I).DefaultCellStyle.Format = "N2"
        dgNomina.Columns(I).ReadOnly = True
        For I = 1 To 2
            dgNomina.Columns(I).Frozen = True
        Next

    End Sub
    Sub BuscaInfonavit()
        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "SELECT IdEmpleado, sum(Monto) as Total " & _
                 " FROM AbonosInfonavit " & _
                 " WHERE Bimestre=" & txtInfonavit.Text & " AND Anio=" & txtAnio.Text & " " & _
                 " GROUP BY IdEmpleado"


        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Dim IDemp As Integer

        Do While rdBuscar.Read()
            IDemp = rdBuscar("IdEmpleado")
            Infonavit(IDemp) = rdBuscar("Total")
        Loop

    End Sub
    Sub BuscaFonacot()
        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "SELECT IdEmpleado, sum(Monto) as Total " & _
                 " FROM AbonosFonacot " & _
                 " WHERE Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text & " " & _
                 " GROUP BY IdEmpleado"


        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Dim IDemp As Integer

        Do While rdBuscar.Read()
            IDemp = rdBuscar("IdEmpleado")
            Fonacot(IDemp) = rdBuscar("Total")
        Loop

    End Sub
    Sub CargaNomina()
        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection
        Dim NuevaFecha1 As String = datInicial.Value.ToString("yyyy-dd-MM")
        Dim NuevaFecha2 As String = datFinal.Value.AddDays(1).ToString("yyyy-dd-MM")

        NuevaFecha1 = NuevaFecha1 & " 00:00:00"
        NuevaFecha2 = NuevaFecha2 & " 00:00:00"
        Dim strSql As String = ""

        strSql = "Select Fecha,IdAutobus,L.IdOperador,NoEconomico,CodigoOperador,NombreOperador,Vueltas,cCodigoV01 " & _
                 " FROM Liquidacion L " & _
                 " INNER JOIN Rutas R " & _
                 " ON L.IdRuta=R.IdRuta" & _
                 " INNER JOIN OperadoresGlobal O " & _
                 " ON L.CodigoOperador=O.Codigo " & _
                 " WHERE Fecha>='" & NuevaFecha1 & "' " & _
                 " AND Fecha<='" & NuevaFecha2 & "' " & _
                 " AND O.Empresa='AUSL'" & _
                 " ORDER BY CodigoOperador,Fecha"

        lblStatus.Text = "Buscando registros..."
        Application.DoEvents()

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Dim Row As DataRow
        Dim Operador As String = ""
        Dim Primero As Boolean = True
        Dim Sueldo As Double = 0
        Dim Nombre As String = ""
        Dim Actual As Integer
        Dim SueldoNomina As Double = 0
        Dim dias As Integer = 0

        Dim DiferenciaSueldo As Double = 0
        'Variables para obtener precio
        Dim Precio As Double = 0
        Dim Vueltas As Decimal = 0

        'Variables globales para percepciones
        Dim SM_Zona_A As Double = BuscarDblDatoCitra("SELECT MONTO FROM SalariosMinimos WHERE ZONA='A'")
        Dim SM_Zona_C As Double = BuscarDblDatoCitra("SELECT MONTO FROM SalariosMinimos WHERE ZONA='C'")
        Dim SueldoDiario As Double = 223.19
        Dim Despensa As Double = 0
        Dim Total_Percepciones As Double = 0
        Dim Horas_Extras As Double = 0
        Dim CalculoExtras As Double = 0
        Dim Deporte As Double = 0
        Dim Puntualidad As Double = 0
        Dim Asistencia As Double = 0
        Dim Gratificacion As Double = 0

        'Variables para deducciones
        Dim BaseGravada As Double
        Dim LimInferior As Double
        Dim ExcLimInf As Double
        Dim PorcenLimInfe As Double
        Dim ImptoMarginal As Double
        Dim CuotaFija As Double
        Dim Cesantia As Double
        Dim Excedente38mf As Double = 27.9599
        Dim ImpRetener As Double
        Dim Impto As Double
        Dim Imss As Double
        Dim Invalidez As Double
        Dim Maternidad As Double
        Dim Medicos As Double
        Dim Subsidio As Double
        Dim PrestacionDinero As Double
        Dim PrestacionEspecie As Double
        Dim SDI As Double = 216.13
        Dim TotalDeducciones As Double = 0
        Dim TotalNeto As Double = 0
        Dim CargoBimestre As Double = 0
        Dim AbonoBimestre As Double = 0
        Dim RestaBimestre As Double = 0
        Dim DescuentoInfonavit As Double = 0
        Dim Porcentaje As Decimal = 0
        Dim DeduccionesVerificar As Double = 0
        Dim CargoMes As Double = 0
        Dim AbonoMes As Double = 0
        Dim RestaMes As Double = 0
        Dim DescuentoFonacot As Double = 0
        Dim TotalColumnas As Integer = dgNomina.Columns.Count
        Dim DescuentoDinamico As Integer = 0
        Dim MontoDescontado As Double = 0
        Dim FechaLiquidacion As Date = Now.AddDays(10)
        Dim FechaLiquidacionFormateada As String = ""
        Dim IDEmpleado As Integer = 0
        Dim CodigoEmpleado As String = 0
        Dim Tarjeta As Double
        Dim UltimoPeriodo As Integer = 0
        Dim IdFona As Integer = 0
        Dim IdInfo As Integer = 0
        Dim Serie As String = ""

        lblStatus.Text = "Preparando formulas..."
        Application.DoEvents()
        Primero = False

        BuscaInfonavit()
        BuscaFonacot()
        Dim DiasDescontarInfonavit As Decimal = 0
        Dim DiasDescontarFonacot As Decimal = 0

        'Prepara dias a descontar de Infonavit*******************************************************************************************
        Dim IdTipoPeriodo As Integer = BuscarIntDatoNominas("NOM10023", "IdTipoPeriodo", "NombreTipoPeriodo='" & lstPeriodos.Text.Trim & "'")
        Dim PeriodoInicialInfonavit As Integer = BuscarIntDatoCitra("PeriodoInfonavit", "Del", "Bimestre=" & txtInfonavit.Text & " AND Anio=" & txtAnio.Text)
        Dim PeriodoFinalInfonavit As Integer = BuscarIntDatoCitra("PeriodoInfonavit", "Al", "Bimestre=" & txtInfonavit.Text & " AND Anio=" & txtAnio.Text)
        Dim FechaInicialPeriodoInfFon As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & txtNomina.Text)
        If txtNomina.Text >= PeriodoInicialInfonavit And txtNomina.Text <= PeriodoFinalInfonavit Then
            Dim FechaInicialInfonavit As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoInicialInfonavit)
            Dim FechaFinalInfonavit As Date = BuscarDateDatoNominas("SELECT FechaFin FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoFinalInfonavit)
            Dim DiasTotalesDescuentoInf As Integer = DateDiff(DateInterval.Day, FechaInicialInfonavit, FechaFinalInfonavit)
            Dim DiasRestantesInfonavit As Integer = DateDiff(DateInterval.Day, FechaInicialPeriodoInfFon, FechaFinalInfonavit)
            DiasDescontarInfonavit = (DiasRestantesInfonavit * 35) / DiasTotalesDescuentoInf
        Else
            DiasDescontarInfonavit = 0
        End If


        'Prepara dias a descontar de fonacot********************************************************************************************
        Dim PeriodoInicialFonacot = BuscarIntDatoCitra("PeriodoFonacot", "Del", "Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)
        Dim PeriodoFinalFonacot = BuscarIntDatoCitra("PeriodoFonacot", "Al", "Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)
        If txtNomina.Text >= PeriodoInicialFonacot And txtNomina.Text <= PeriodoFinalFonacot Then
            Dim FechaInicialFonacot As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoInicialFonacot)
            Dim FechaFinalFonacot As Date = BuscarDateDatoNominas("SELECT FechaFin FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoFinalFonacot)
            Dim DiasTotalesDescuentoFon As Integer = DateDiff(DateInterval.Day, FechaInicialFonacot, FechaFinalFonacot)
            Dim DiasRestantesFonacot As Integer = DateDiff(DateInterval.Day, FechaInicialPeriodoInfFon, FechaFinalFonacot)
            DiasDescontarFonacot = (DiasRestantesFonacot * 15) / DiasTotalesDescuentoFon
        Else
            DiasDescontarFonacot = 0
        End If


        Do While rdBuscar.Read()
            If Operador <> rdBuscar("CodigoOperador") Then
                If Sueldo > 0 Then
                    If Primero = False Then
                        'Calcula Sueldo*************************************
                        'If CodigoEmpleado = "01036" Then
                        'dias = 5
                        'ElseIf CodigoEmpleado = "01075" Then
                        'dias = 7
                        'End If
                        SueldoNomina = SueldoDiario * dias
                        If Sueldo <= SueldoDiario Then
                            SueldoNomina = Sueldo
                        ElseIf SueldoNomina > Sueldo Then
                            SueldoNomina = Sueldo
                        End If
                        DiferenciaSueldo = Sueldo - SueldoNomina
                        'Calcula Despensa***********************************
                        Despensa = (SM_Zona_A * 0.4) * 7
                        If DiferenciaSueldo < Despensa Then
                            Despensa = DiferenciaSueldo
                        ElseIf Despensa > DiferenciaSueldo Then
                            Despensa = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa)
                        'Calcula Horas Extras*******************************
                        CalculoExtras = ((((SM_Zona_A * 3.5) / 8) * 2) * 9)
                        If CalculoExtras < (SM_Zona_C * 5) Then
                            Horas_Extras = CalculoExtras
                        Else
                            Horas_Extras = SM_Zona_C * 5
                        End If
                        If DiferenciaSueldo < Horas_Extras Then
                            Horas_Extras = DiferenciaSueldo
                        ElseIf Horas_Extras > DiferenciaSueldo Then
                            Horas_Extras = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras)
                        'Calcula Deporte y Cultura**************************
                        Deporte = SueldoNomina * 0.1
                        If DiferenciaSueldo < Deporte Then
                            Deporte = DiferenciaSueldo
                        ElseIf Deporte > DiferenciaSueldo Then
                            Deporte = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte)
                        'Calcula premio de puntualidad**********************
                        Puntualidad = SueldoNomina * 0.1
                        If DiferenciaSueldo < Puntualidad Then
                            Puntualidad = DiferenciaSueldo
                        ElseIf Puntualidad > DiferenciaSueldo Then
                            Puntualidad = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad)
                        'Calcula premio de asistencia**********************
                        Asistencia = SueldoNomina * 0.1
                        If DiferenciaSueldo < Asistencia Then
                            Asistencia = DiferenciaSueldo
                        ElseIf Asistencia > DiferenciaSueldo Then
                            Asistencia = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia)
                        'Calcula gratificacion*****************************
                        Gratificacion = DiferenciaSueldo

                        Total_Percepciones = SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia + Gratificacion
                        'Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
                        'Muestra valores*******************************************************************************************************

                        '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

                        'Calcula Tarjeta*****************************************
                        Tarjeta = 10 * dias
                        Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
                        'Calcula Infonavit*****************************************

                        If DiasDescontarInfonavit > 0 Then
                            CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                            AbonoBimestre = Infonavit(IDEmpleado)
                            RestaBimestre = CargoBimestre - AbonoBimestre
                            If RestaBimestre > 0 Then
                                'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                                DescuentoInfonavit = (RestaBimestre / DiasDescontarInfonavit) * dias '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                                If DescuentoInfonavit > RestaBimestre Then
                                    DescuentoInfonavit = RestaBimestre
                                End If
                                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                                If DeduccionesVerificar > Porcentaje Then
                                    DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                                    If DescuentoInfonavit < 0 Then
                                        DescuentoInfonavit = 0
                                    End If
                                End If
                            Else
                                DescuentoInfonavit = 0
                            End If
                        End If



                        'Calcula Fonacot******************************************
                        If DiasDescontarFonacot > 0 Then
                            CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                            AbonoMes = Fonacot(IDEmpleado)
                            RestaMes = CargoMes - AbonoMes
                            UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)

                            If RestaMes > 0 Then
                                'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                                DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                                If DescuentoFonacot > RestaMes Then
                                    DescuentoFonacot = RestaMes
                                End If
                                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                                If DeduccionesVerificar > Porcentaje Then
                                    If DescuentoFonacot > 0 Then
                                        DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                                    End If
                                    If DescuentoFonacot < 0 Then
                                        DescuentoFonacot = 0
                                    End If
                                End If

                            Else
                                DescuentoFonacot = 0
                            End If
                        End If



                        'Imprime valores de columnas fijas*****************************************************
                        dgNomina.Rows.Add(Row)
                        Actual = dgNomina.Rows.Count - 1
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(0).Value = IDEmpleado
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(1).Value = CodigoEmpleado
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(2).Value = Nombre
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(3).Value = Sueldo
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(4).Value = dias
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(5).Value = SueldoNomina
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(6).Value = Despensa
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(7).Value = Horas_Extras
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(8).Value = Deporte
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(9).Value = Puntualidad
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(10).Value = Asistencia
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(11).Value = Gratificacion
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(12).Value = Total_Percepciones
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(13).Value = ImpRetener
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(14).Value = Tarjeta
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(15).Value = DescuentoInfonavit
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(16).Value = DescuentoFonacot
                        Application.DoEvents()

                        'Calcula descuentos dinamicos*****************************************************
                        MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                        If TotalColumnas > 19 Then
                            For i = 17 To dgNomina.Columns.Count - 3
                                DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                                DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                                If DeduccionesVerificar > Porcentaje Then
                                    DescuentoDinamico = Porcentaje - MontoDescontado
                                    If DescuentoDinamico < 0 Then
                                        DescuentoDinamico = 0
                                    End If
                                End If
                                MontoDescontado = MontoDescontado + DescuentoDinamico
                                dgNomina.Rows(Actual).Cells(i).Value = DescuentoDinamico
                                DescuentoDinamico = 0
                            Next
                        End If
                        TotalDeducciones = MontoDescontado
                        TotalNeto = Total_Percepciones - TotalDeducciones
                        dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
                        Application.DoEvents()

                        'Limpia variables
                        Sueldo = 0
                        dias = 0
                        SueldoNomina = 0
                        Despensa = 0
                        DiferenciaSueldo = 0
                        Horas_Extras = 0
                        Deporte = 0
                        Puntualidad = 0
                        Asistencia = 0
                        Gratificacion = 0
                        Total_Percepciones = 0
                        BaseGravada = 0
                        LimInferior = 0
                        ExcLimInf = 0
                        PorcenLimInfe = 0
                        ImptoMarginal = 0
                        CuotaFija = 0
                        Cesantia = 0
                        ImpRetener = 0
                        Impto = 0
                        Imss = 0
                        Invalidez = 0
                        Maternidad = 0
                        Medicos = 0
                        Subsidio = 0
                        PrestacionDinero = 0
                        PrestacionEspecie = 0
                        TotalDeducciones = 0
                        TotalNeto = 0
                        FechaLiquidacion = Now.AddDays(10)
                        FechaLiquidacionFormateada = ""
                        UltimoPeriodo = 0
                    End If
                    'Primero = False
                Else
                    'Limpia variables
                    Sueldo = 0
                    dias = 0
                    SueldoNomina = 0
                    Despensa = 0
                    DiferenciaSueldo = 0
                    Horas_Extras = 0
                    Deporte = 0
                    Puntualidad = 0
                    Asistencia = 0
                    Gratificacion = 0
                    Total_Percepciones = 0
                    BaseGravada = 0
                    LimInferior = 0
                    ExcLimInf = 0
                    PorcenLimInfe = 0
                    ImptoMarginal = 0
                    CuotaFija = 0
                    Cesantia = 0
                    ImpRetener = 0
                    Impto = 0
                    Imss = 0
                    Invalidez = 0
                    Maternidad = 0
                    Medicos = 0
                    Subsidio = 0
                    PrestacionDinero = 0
                    PrestacionEspecie = 0
                    TotalDeducciones = 0
                    TotalNeto = 0
                    FechaLiquidacion = Now.AddDays(10)
                    FechaLiquidacionFormateada = ""
                    UltimoPeriodo = 0
                End If
            End If
            Operador = rdBuscar("CodigoOperador")
            CodigoEmpleado = rdBuscar("CodigoOperador").ToString.Trim
            IDEmpleado = BuscarIntDatoCitra("Empleados", "IDEmpleado", "Codigo='" & CodigoEmpleado.ToString.Trim & "'")
            Nombre = Trim(BuscarStrDatoCitra("Empleados", "NombreCompleto", "Codigo='" & CodigoEmpleado & "'"))
            lblStatus.Text = "Calculando nomina de " & Nombre & "..."
            Application.DoEvents()
            Serie = rdBuscar("cCodigoV01").ToString.Trim
            'IDRuta = BuscarIntDato("MGW10002", "CIDVALOR01", "CIDCLIEN01=" & rdBuscar("CIDCLIEN01"))
            Precio = BuscarDblDatoCitra("PrecioVueltas", "PRECIO", "ABRE='" & Serie.Trim & "'")
            Vueltas = rdBuscar("Vueltas")

            Sueldo = Sueldo + (Vueltas * Precio)
            If FechaLiquidacionFormateada <> Format(CDate(rdBuscar("fecha").ToString).Year, "0000") & Format(CDate(rdBuscar("fecha").ToString).Month, "00") & Format(CDate(rdBuscar("fecha").ToString).Day, "00") Then
                dias = dias + 1
            End If
            FechaLiquidacion = rdBuscar("fecha")
            FechaLiquidacionFormateada = Format(CDate(FechaLiquidacion).Year, "0000") & Format(CDate(FechaLiquidacion).Month, "00") & Format(CDate(FechaLiquidacion).Day, "00")
            'If CodigoEmpleado = "01164" Then
            'MsgBox("Nombre:" & Nombre & ", Dias;" & dias & ",fecha formateada:" & FechaLiquidacionFormateada, MsgBoxStyle.Information, "Aviso")
            'End If
            'Inserta registros a tabla de acumulados*************************************************************
            Acum.IdSueldo = Acum.consecutivo
            Acum.Fecha = rdBuscar("fecha")
            Acum.IdClien01 = rdBuscar("IdAutobus")
            Acum.RazonSo01 = rdBuscar("NoEconomico").ToString.Trim
            Acum.Nomina = txtNomina.Text
            Acum.Anio = txtAnio.Text
            Acum.Folio = txtFolio.Text
            Acum.Total = Vueltas * Precio
            Acum.Insertar()
        Loop
        If Sueldo > 0 Then
            'Calcula Sueldo*************************************
            SueldoNomina = SueldoDiario * dias
            If Sueldo <= SueldoDiario Then
                SueldoNomina = Sueldo
            ElseIf SueldoNomina > Sueldo Then
                SueldoNomina = Sueldo
            End If
            DiferenciaSueldo = Sueldo - SueldoNomina
            'Calcula Despensa***********************************
            Despensa = (SM_Zona_A * 0.4) * 7
            If DiferenciaSueldo < Despensa Then
                Despensa = DiferenciaSueldo
            ElseIf Despensa > DiferenciaSueldo Then
                Despensa = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa)
            'Calcula Horas Extras*******************************
            CalculoExtras = ((((SM_Zona_A * 3.5) / 8) * 2) * 9)
            If CalculoExtras < (SM_Zona_C * 5) Then
                Horas_Extras = CalculoExtras
            Else
                Horas_Extras = SM_Zona_C * 5
            End If
            If DiferenciaSueldo < Horas_Extras Then
                Horas_Extras = DiferenciaSueldo
            ElseIf Horas_Extras > DiferenciaSueldo Then
                Horas_Extras = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras)
            'Calcula Deporte y Cultura**************************
            Deporte = SueldoNomina * 0.1
            If DiferenciaSueldo < Deporte Then
                Deporte = DiferenciaSueldo
            ElseIf Deporte > DiferenciaSueldo Then
                Deporte = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte)
            'Calcula premio de puntualidad**********************
            Puntualidad = SueldoNomina * 0.1
            If DiferenciaSueldo < Puntualidad Then
                Puntualidad = DiferenciaSueldo
            ElseIf Puntualidad > DiferenciaSueldo Then
                Puntualidad = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad)
            'Calcula premio de asistencia**********************
            Asistencia = SueldoNomina * 0.1
            If DiferenciaSueldo < Asistencia Then
                Asistencia = DiferenciaSueldo
            ElseIf Asistencia > DiferenciaSueldo Then
                Asistencia = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia)
            'Calcula gratificacion*****************************
            Gratificacion = DiferenciaSueldo

            Total_Percepciones = SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia + Gratificacion

            'Muestra valores*******************************************************************************************************

            '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

            'Calcula Tarjeta*****************************************
            Tarjeta = 10 * dias

            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
            'Muestra valores*******************************************************************************************************

            '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

            'CALCULA ISR **********************************************************************************************************

            'Calcula Infonavit*****************************************

            CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
            AbonoBimestre = Infonavit(IDEmpleado)
            RestaBimestre = CargoBimestre - AbonoBimestre
            If RestaBimestre > 0 Then
                'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                DescuentoInfonavit = (RestaBimestre / DiasDescontarInfonavit) * dias '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                If DescuentoInfonavit > RestaBimestre Then
                    DescuentoInfonavit = RestaBimestre
                End If
                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                If DeduccionesVerificar > Porcentaje Then
                    DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                    If DescuentoInfonavit < 0 Then
                        DescuentoInfonavit = 0
                    End If
                End If
            Else
                DescuentoInfonavit = 0
            End If


            'Calcula Fonacot******************************************
            CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
            AbonoMes = Fonacot(IDEmpleado)
            RestaMes = CargoMes - AbonoMes
            UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)

            If RestaMes > 0 Then
                'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                If DescuentoFonacot > RestaMes Then
                    DescuentoFonacot = RestaMes
                End If
                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                If DeduccionesVerificar > Porcentaje Then
                    If DescuentoFonacot > 0 Then
                        DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                    End If
                    If DescuentoFonacot < 0 Then
                        DescuentoFonacot = 0
                    End If
                End If

            Else
                DescuentoFonacot = 0
            End If


            'Imprime valores de columnas fijas*****************************************************
            dgNomina.Rows.Add(Row)
            Actual = dgNomina.Rows.Count - 1
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(0).Value = IDEmpleado
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(1).Value = CodigoEmpleado
            Application.DoEvents()
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(2).Value = Nombre
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(3).Value = Sueldo
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(4).Value = dias
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(5).Value = SueldoNomina
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(6).Value = Despensa
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(7).Value = Horas_Extras
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(8).Value = Deporte
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(9).Value = Puntualidad
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(10).Value = Asistencia
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(11).Value = Gratificacion
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(12).Value = Total_Percepciones
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(13).Value = ImpRetener
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(14).Value = Tarjeta
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(15).Value = DescuentoInfonavit
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(16).Value = DescuentoFonacot
            Application.DoEvents()


            'Calcula descuentos dinamicos*****************************************************
            MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot
            If TotalColumnas > 19 Then
                For i = 17 To dgNomina.Columns.Count - 3
                    DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                    DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoDinamico = Porcentaje - MontoDescontado
                    End If
                    MontoDescontado = MontoDescontado + DescuentoDinamico
                    dgNomina.Rows(Actual).Cells(i).Value = DescuentoDinamico

                    DescuentoDinamico = 0
                Next
            End If

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0

        End If

        Dim Contador As Integer = dgNomina.Rows.Count
        If Contador = 0 Then
            Dim Cols As Integer = dgNomina.Columns.Count - 1
            If Cols > 17 Then
                Do While Cols <> 17
                    dgNomina.Columns.RemoveAt(dgNomina.Columns(Cols).Index)
                    Cols = Cols - 1
                Loop
            End If
            dgNomina.Visible = False
            lblStatus.Text = "No hay registros para procesar"
            Exit Sub
        End If



        lblStatus.Text = "La nómina se ha calculado correctamente"
        Application.DoEvents()
    End Sub

    Private Sub RadButton3_Click(sender As System.Object, e As System.EventArgs) Handles RadButton3.Click
        dgNomina.Visible = True
        PreparaGrid()
        CargaNomina()

    End Sub
    Function Monto_Descuento(ByVal Adeudo As String, ByVal Empleado As Integer, ByVal Dias As Integer) As Double
        Dim IdAdeudo As Integer
        Dim TipoAplicacion As Integer
        Dim TipoDescuento As Integer
        Dim CantidadDiaria As Integer
        Dim Descontar As Double

        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "SELECT * FROM Adeudos WHERE Nombre='" & Adeudo & "'"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Do While rdBuscar.Read()
            IdAdeudo = rdBuscar("IdAdeudo")
            TipoAplicacion = rdBuscar("Aplicacion")
            TipoDescuento = rdBuscar("Descuento")
            CantidadDiaria = rdBuscar("Cantidad")
        Loop


        If TipoAplicacion = 1 Then
            Descontar = CantidadDiaria * Dias
        Else
            Dim TotalCargos As Double = BuscarDblDatoCitra("SELECT SUM(Monto) AS MONTO FROM Movimientos WHERE Tipo=0 AND IdEmpleado=" & Empleado & " AND IdAdeudo=" & IdAdeudo)
            Dim TotalAbonos As Double = BuscarDblDatoCitra("SELECT SUM(Monto) AS MONTO FROM Movimientos WHERE Tipo=1 AND IdEmpleado=" & Empleado & " AND IdAdeudo=" & IdAdeudo)
            Dim TotalAdeudo As Double = TotalCargos - TotalAbonos

            If TotalAdeudo <= 0 Then
                Descontar = 0
                Return Descontar
                Exit Function
            End If

            If TipoDescuento = 1 Then
                Descontar = TotalAdeudo
            Else
                Descontar = CantidadDiaria * Dias
                If Descontar > TotalAdeudo Then
                    Descontar = TotalAdeudo
                End If
            End If
        End If

        Return Descontar
    End Function

    Private Sub ToolStripButton4_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton4.Click
        dgNomina.Rows.Clear()
        txtFolio.Text = 0
        Dim i As Integer = dgNomina.Columns.Count - 1
        Do While i <> 16
            dgNomina.Columns.RemoveAt(dgNomina.Columns(i).Index)
            i = i - 1
        Loop
        frmModuloNominas.Actualizar()
        Close()

    End Sub

    Private Sub RadButton1_Click(sender As System.Object, e As System.EventArgs) Handles RadButton1.Click
        BorrarAcumulados()
        Guardado = False

        txtFolio.Text = 0
        txtFolio.Text = (BuscarIntDatoCitra("SELECT MAX(IdNomina) as Id FROM NominaGeneral")) + 1
        lblStatus.Text = "Preparado para calcular..."
        Application.DoEvents()

    End Sub

    Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
        BorrarAcumulados()
        Guardado = False

        txtFolio.Text = 0
        txtFolio.Text = (BuscarIntDatoCitra("SELECT MAX(IdNomina) as Id FROM NominaGeneral")) + 1
        lblStatus.Text = "Preparado para calcular..."
        Application.DoEvents()
    End Sub
    Sub Periodos()

        lstPeriodos.Items.Clear()

        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = NominasConnection

        Dim strSql As String = ""
        strSql = "SELECT NombreTipoPeriodo FROM NOM10023"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Do While rdBuscar.Read()
            lstPeriodos.Items.Add(rdBuscar("NombreTipoPeriodo").ToString.Trim)
        Loop
    End Sub
    Sub Verificar()

        'Primero Genera Valores para progress Bar
        'Obtiene valores generales
        Dim IdTipoPeriodo As Integer = BuscarIntDatoNominas("NOM10023", "IdTipoPeriodo", "NombreTipoPeriodo='" & lstPeriodos.Text & "'")
        Dim IdPeriodo As Integer = BuscarIntDatoNominas("NOM10002", "IdPeriodo", "IdTipoPeriodo=" & IdTipoPeriodo & " AND NumeroPeriodo=" & txtNomina.Text & " AND Ejercicio=" & txtAnio.Text)
        Dim IdEmpleado As Integer = 0
        Dim IdEmpleadoPeriodo As Integer = 0
        Dim Status As String = ""
        Dim CadenaOtroPeriodo As String = ""
        Dim CadenaBajas As String = ""
        Dim CuentaOtroPeriodo As Integer = 0
        Dim CuentBajas As Integer = 0
        PuedeContinuar = True

        'GUARDA DESCUENTOS DINAMICOS********************************************************************
        Dim j As Integer
        Dim NombreAdeudo As String = ""

        For I = 0 To dgNomina.Rows.Count - 1
            IdEmpleado = BuscarIntDatoNominas("NOM10001", "IdEmpleado", "CodigoEmpleado='" & dgNomina.Rows(I).Cells(1).Value.ToString.Trim & "'")
            IdEmpleadoPeriodo = BuscarIntDatoNominas("NOM10034", "IdEmpleado", "IdEmpleado=" & IdEmpleado & " AND IdTipoPeriodo=" & IdTipoPeriodo)
            If IdEmpleadoPeriodo = 0 Then
                CadenaOtroPeriodo = CadenaOtroPeriodo & ", " & Trim(BuscarStrDatoNominas("NOM10001", "NombreLargo", "IdEmpleado=" & IdEmpleado))
                CuentaOtroPeriodo = CuentaOtroPeriodo + 1
            Else
                Status = Trim(BuscarStrDatoNominas("NOM10001", "EstadoEmpleado", "IdEmpleado=" & IdEmpleado))
                If Status.Trim = "B" Then
                    CadenaBajas = CadenaBajas & ", " & Trim(BuscarStrDatoNominas("NOM10001", "NombreLargo", "IdEmpleado=" & IdEmpleado))
                    CuentBajas = CuentBajas + 1
                End If
            End If
        Next

        If CuentaOtroPeriodo > 1 Then
            MsgBox("Los empleados " & Mid(CadenaOtroPeriodo, 3) & " fuerón omitidos del proceso porque no pertenecen al periodo " & lstPeriodos.Text, MsgBoxStyle.Exclamation, "Aviso")
            PuedeContinuar = False
        ElseIf CuentaOtroPeriodo = 1 Then
            MsgBox("El empleado " & Mid(CadenaOtroPeriodo, 3) & " fué omitido del proceso porque no pertenece al periodo " & lstPeriodos.Text, MsgBoxStyle.Exclamation, "Aviso")
            PuedeContinuar = False
        End If

        If CuentBajas > 1 Then
            MsgBox("Los empleados " & Mid(CadenaBajas, 3) & " fuerón omitidos del proceso porque estan registrados como baja ", MsgBoxStyle.Exclamation, "Aviso")
            PuedeContinuar = False
        ElseIf CuentBajas = 1 Then
            MsgBox("El empleado " & Mid(CadenaBajas, 3) & " fué omitido del proceso porque esta registrado como baja ", MsgBoxStyle.Exclamation, "Aviso")
            PuedeContinuar = False
        End If





    End Sub
    Private Sub RadButton2_Click(sender As System.Object, e As System.EventArgs) Handles RadButton2.Click
        If txtNomina.Text = 0 Then
            MsgBox("Indique el numero de periodo de NomiPAQ", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub
        End If
        If txtNomina.Text = "" Then
            MsgBox("Indique el numero de periodo de NomiPAQ", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub
        End If
        If dgNomina.Rows.Count = 0 Then
            MsgBox("No hay registros para guardar", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub
        End If
        If lstPeriodos.Text = "" Then
            MsgBox("Indique el tipo de periodo", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub
        End If

        Verificar()
        If PuedeContinuar = False Then
            MsgBox("No se puedo guardar", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub

        End If

        Guardado = True
        Dim I As Integer
        Dim UltimaColumna As Integer = dgNomina.Columns.Count - 1

        'PRIMERO GUARDA LOS GENERALES DE LA NOMINA***********************************************
        lblStatus.Text = "Guardando datos generales..."
        Application.DoEvents()
        Nom.IdNomina = (BuscarIntDatoCitra("SELECT MAX(IdNomina) as Id FROM NominaGeneral")) + 1
        Nom.Folio = txtFolio.Text
        Nom.Infonavit = txtInfonavit.Text
        Nom.Fonacot = txtFonacot.Text
        Nom.Anio = txtAnio.Text
        Nom.Nomina = txtNomina.Text
        Nom.Columnas = dgNomina.Columns.Count - 17
        Nom.FechaInicial = datInicial.Value
        Nom.FechaFinal = datFinal.Value
        Nom.FechaAplicacion = datAplicacion.Value
        Nom.Insertar()

        For I = 0 To dgNomina.Rows.Count - 1
            'GUARDA LOS MOVIMIENTOS DE LA NOMINA (SIN LOS DESCUENTOS DINAMICOS)**********************
            lblStatus.Text = "Guardando registros..."
            Application.DoEvents()
            Gen.cIdDetalle = (BuscarIntDatoCitra("SELECT MAX(IdDetalle) as ID FROM NominaDetalle")) + 1
            Gen.cIdNomina = Nom.IdNomina
            Gen.cIdEmpleado = dgNomina.Rows(I).Cells(0).Value
            Gen.cCodigo = dgNomina.Rows(I).Cells(1).Value.ToString.Trim
            Gen.cNombre = dgNomina.Rows(I).Cells(2).Value.ToString.Trim
            Gen.cIngreso = dgNomina.Rows(I).Cells(3).Value
            Gen.cDias = dgNomina.Rows(I).Cells(4).Value
            Gen.cSueldo = dgNomina.Rows(I).Cells(5).Value
            Gen.cAyuda = dgNomina.Rows(I).Cells(6).Value
            Gen.cHoras = dgNomina.Rows(I).Cells(7).Value
            Gen.cDeporte = dgNomina.Rows(I).Cells(8).Value
            Gen.cPuntualidad = dgNomina.Rows(I).Cells(9).Value
            Gen.cAsistencia = dgNomina.Rows(I).Cells(10).Value
            Gen.cGratificacion = dgNomina.Rows(I).Cells(11).Value
            Gen.cPercepciones = dgNomina.Rows(I).Cells(12).Value
            Gen.cISR = dgNomina.Rows(I).Cells(13).Value
            Gen.cIMSS = dgNomina.Rows(I).Cells(14).Value
            Gen.cINFONAVIT = dgNomina.Rows(I).Cells(15).Value
            Gen.cFONACOT = dgNomina.Rows(I).Cells(16).Value
            Gen.cDeducciones = dgNomina.Rows(I).Cells(UltimaColumna - 1).Value
            Gen.cTotal = dgNomina.Rows(I).Cells(UltimaColumna).Value
            Gen.Insertar()
            'GUARDA LOS ABONOS DE INFONAVIT**********************************************************
            lblStatus.Text = "Generando saldos..."
            Application.DoEvents()
            Info.cIdAbono = (BuscarIntDatoCitra("SELECT MAX(IdAbono) as ID FROM AbonosInfonavit")) + 1
            Info.cIdEmpleado = dgNomina.Rows(I).Cells(0).Value
            Info.cidNomina = Nom.IdNomina
            Info.cBimestre = txtInfonavit.Text
            Info.cPeriodo = txtNomina.Text
            Info.cMonto = dgNomina.Rows(I).Cells(15).Value
            Info.cAnio = txtAnio.Text
            Info.Insertar()
            'GUARDA LOS ABONOS DE FONACOT************************************************************
            Fona.cIdAbono = (BuscarIntDatoCitra("SELECT MAX(IdAbono) as ID FROM AbonosFonacot")) + 1
            Fona.cIdEmpleado = dgNomina.Rows(I).Cells(0).Value
            Fona.cidNomina = Nom.IdNomina
            Fona.cMes = txtFonacot.Text
            Fona.cPeriodo = txtNomina.Text
            Fona.cMonto = dgNomina.Rows(I).Cells(16).Value
            Fona.cAnio = txtAnio.Text
            Fona.Insertar()

        Next
       
        'GUARDA DESCUENTOS DINAMICOS********************************************************************
        Dim j As Integer
        Dim NombreAdeudo As String = ""
        Dim IdAdeudo As Integer = 0

        If dgNomina.Columns.Count > 19 Then
            For j = 17 To dgNomina.Columns.Count - 3
                NombreAdeudo = dgNomina.Columns(j).HeaderText.Trim.Trim
                IdAdeudo = BuscarIntDatoCitra("Adeudos", "IdAdeudo", "Nombre='" & NombreAdeudo & "'")
                For I = 0 To dgNomina.Rows.Count - 1
                    lblStatus.Text = "Generando estados de cuenta..."
                    Application.DoEvents()
                    Mov.IdMovimiento = (BuscarIntDatoCitra("SELECT MAX(IdMovimiento) as ID FROM Movimientos")) + 1
                    Mov.IDAdeudo = IdAdeudo
                    Mov.IdEmpleado = dgNomina.Rows(I).Cells(0).Value
                    Mov.IdNomina = Nom.IdNomina
                    Mov.Fecha = datAplicacion.Value
                    Mov.Monto = dgNomina.Rows(I).Cells(j).Value
                    Mov.Tipo = 1
                    Mov.Insertar()
                Next
            Next
        End If
        lblStatus.Text = "Nomina Guardada con Éxito"
        Application.DoEvents()
        txtFolio.Text = (BuscarIntDatoCitra("SELECT MAX(IdNomina) as Id FROM NominaGeneral")) + 1


    End Sub
    Private Sub ExcelNominaActualToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs)
        ToExcel(dgNomina, "Nomina")
    End Sub
    Sub Actualizar()
        Dim intFolio As Integer = 0
        If Me.txtFolio.Text <> "" Then
            intFolio = Me.txtFolio.Text
            Nom.IdNomina = Me.txtFolio.Text
        Else
            intFolio = 0
            Nom.IdNomina = 0
        End If
        Nom.Buscar()
        Scatter()
        Me.txtFolio.Text = intFolio
        Nom.IdNomina = Me.txtFolio.Text
    End Sub
    Private Sub Scatter()
        If Nom.Nomina = 0 Then
            txtInfonavit.Text = BuscarIntDatoCitra("PeriodoInfonavit", "Bimestre", "Status='Abierto'")
            txtFonacot.Text = BuscarIntDatoCitra("PeriodoFonacot", "Mes", "Status='Abierto'")
            txtAnio.Text = Now.Year
            txtNomina.Text = Nom.Nomina
            Nomi = Nom.Folio
            datInicial.Value = Nom.FechaInicial
            datFinal.Value = Nom.FechaFinal
            datAplicacion.Value = Nom.FechaAplicacion

            txtAnio.Enabled = True
            txtNomina.Enabled = True
            datInicial.Enabled = True
            datFinal.Enabled = True
            datAplicacion.Enabled = True
            RadButton2.Enabled = True
            RadButton3.Enabled = True

            dgNomina.Rows.Clear()
            Dim i As Integer = dgNomina.Columns.Count - 1
            If i > 16 Then
                Do While i <> 16
                    dgNomina.Columns.RemoveAt(dgNomina.Columns(i).Index)
                    i = i - 1
                Loop
            End If
            dgNomina.Visible = False
            lblStatus.Text = "Preparado para calcular..."
            Application.DoEvents()
        Else
            txtInfonavit.Text = Nom.Infonavit
            txtFonacot.Text = Nom.Fonacot
            txtAnio.Text = Nom.Anio
            txtNomina.Text = Nom.Nomina
            Nomi = Nom.Folio
            datInicial.Value = Nom.FechaInicial
            datFinal.Value = Nom.FechaFinal
            datAplicacion.Value = Nom.FechaAplicacion

            txtAnio.Enabled = False
            txtNomina.Enabled = False
            datInicial.Enabled = False
            datFinal.Enabled = False
            datAplicacion.Enabled = False
            RadButton2.Enabled = False
            RadButton3.Enabled = False

            dgNomina.Visible = True
            lblStatus.Text = "Nómina de solo lectura"
            Application.DoEvents()
            BuscaNomina()
            BuscaDinamicos()
        End If
    End Sub
    Sub BuscaNomina()
        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "SELECT * FROM NominaDetalle WHERE IdNomina=" & txtFolio.Text & " ORDER BY IdDetalle"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Dim Columnas As Integer = BuscarIntDatoCitra("NominaGeneral", "Columnas", "Folio=" & Nomi)

        Dim I As Integer
        Dim Cont As Integer = 0
        Dim ColTotal As Integer = 0

        'Prepara el grid******************************************************************************
        For I = 3 To dgNomina.Columns.Count - 1
            dgNomina.Columns(I).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            dgNomina.Columns(I).DefaultCellStyle.Format = "N2"
        Next
        dgNomina.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgNomina.Columns(4).DefaultCellStyle.Format = "N0"

        I = 17
        Dim b As Integer = 16

        For I = 1 To Columnas
            b = b + 1
            dgNomina.Columns.Add("Col" & b, "")
            dgNomina.Columns(b).Width = 80
            dgNomina.Columns(b).ReadOnly = True
            dgNomina.Columns(b).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            dgNomina.Columns(b).DefaultCellStyle.Format = "N2"
            Cont = Cont + 1
        Next

        ColTotal = dgNomina.Columns.Count - 1
        dgNomina.Columns(ColTotal - 1).HeaderText = "Total Deducciones"
        dgNomina.Columns(ColTotal).HeaderText = "Total"

        For I = 1 To 2
            dgNomina.Columns(I).Frozen = True
        Next

        'Carga Datos de nomina general********************************************************************
        Dim Row As DataRow
        I = 0
        Do While rdBuscar.Read()
            dgNomina.Rows.Add(Row)
            dgNomina.Rows(I).Cells(0).Value = rdBuscar("IdEmpleado")
            dgNomina.Rows(I).Cells(1).Value = rdBuscar("Codigo").ToString.Trim
            dgNomina.Rows(I).Cells(2).Value = rdBuscar("Nombre").ToString.Trim
            dgNomina.Rows(I).Cells(3).Value = rdBuscar("Ingreso")
            dgNomina.Rows(I).Cells(4).Value = rdBuscar("Dias")
            dgNomina.Rows(I).Cells(5).Value = rdBuscar("Sueldo")
            dgNomina.Rows(I).Cells(6).Value = rdBuscar("Ayuda")
            dgNomina.Rows(I).Cells(7).Value = rdBuscar("Horas")
            dgNomina.Rows(I).Cells(8).Value = rdBuscar("Deporte")
            dgNomina.Rows(I).Cells(9).Value = rdBuscar("Puntualidad")
            dgNomina.Rows(I).Cells(10).Value = rdBuscar("Asistencia")
            dgNomina.Rows(I).Cells(11).Value = rdBuscar("Gratificacion")
            dgNomina.Rows(I).Cells(12).Value = rdBuscar("Percepciones")
            dgNomina.Rows(I).Cells(13).Value = rdBuscar("ISR")
            dgNomina.Rows(I).Cells(14).Value = rdBuscar("IMSS")
            dgNomina.Rows(I).Cells(15).Value = rdBuscar("Infonavit")
            dgNomina.Rows(I).Cells(16).Value = rdBuscar("Fonacot")
            dgNomina.Rows(I).Cells(ColTotal - 1).Value = rdBuscar("Deducciones")
            dgNomina.Rows(I).Cells(ColTotal).Value = rdBuscar("Total")
            I = I + 1
        Loop

    End Sub
    Sub BuscaDinamicos()
        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "SELECT * FROM Movimientos WHERE IdNomina=" & txtFolio.Text & " ORDER BY IdMovimiento"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader

        Dim i As Integer = 0
        Dim j As Integer = 16
        Dim Adeudo As Integer = 0

        Do While rdBuscar.Read()
            If Adeudo <> rdBuscar("IdAdeudo") Then
                j = j + 1
                i = 0
                dgNomina.Columns(j).HeaderText = Trim(BuscarStrDatoCitra("Adeudos", "Nombre", "idAdeudo=" & rdBuscar("idAdeudo")))
            End If
            Adeudo = rdBuscar("IdAdeudo")
            dgNomina.Rows(i).Cells(j).Value = rdBuscar("Monto")
            i = i + 1
        Loop
    End Sub

    Private Sub txtFolio_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFolio.TextChanged
        Actualizar()
    End Sub

  
    Private Sub ToolStripButton3_Click(sender As System.Object, e As System.EventArgs)

    End Sub

    Private Sub ToolStripButton5_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton5.Click
        ToExcel(dgNomina, "Nomina " & txtNomina.Text)
    End Sub

    Private Sub EnviarAContPAQINominasToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles EnviarAContPAQINominasToolStripMenuItem.Click
        Dim ID As Integer = BuscarIntDatoCitra("NominaGeneral", "Folio", "Folio=" & txtFolio.Text)
        If ID = 0 Then
            MsgBox("Primero debes guardar la nomina", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub
        Else
            frmNominaInterface.ShowDialog()
        End If
    End Sub

    Private Sub CalcularToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles CalcularToolStripMenuItem.Click
        frmNominasCalculo.ShowDialog()

    End Sub

    Private Sub ToolStripButton2_Click(sender As System.Object, e As System.EventArgs)

    End Sub

    Private Sub ToolStripButton2_Click_1(sender As System.Object, e As System.EventArgs) Handles ToolStripButton2.Click
        Dim ID As Integer = txtFolio.Text
        Dim resp As Integer
        resp = MsgBox("¿Desea continuar con la eliminación de la nomina?", MsgBoxStyle.YesNo, "Aviso")
        If resp = 6 Then
            Call SetSqlCitra("DELETE FROM NominaGeneral WHERE Folio=" & ID)
            Call SetSqlCitra("DELETE FROM NominaDetalle WHERE IdNomina=" & ID)
            Call SetSqlCitra("DELETE FROM AbonosInfonavit WHERE IdNomina=" & ID)
            Call SetSqlCitra("DELETE FROM AbonosFonacot WHERE IdNomina=" & ID)
            Call SetSqlCitra("DELETE FROM Movimientos WHERE IdNomina=" & ID)
            frmModuloNominas.Actualizar()
            MsgBox("La nomina se ha eliminado", MsgBoxStyle.Information, "Aviso")
            txtFolio.Text = 0
            txtFolio.Text = (BuscarIntDatoCitra("SELECT MAX(IdNomina) as ID FROM NominaGeneral")) + 1
        End If
    End Sub

    Private Sub ToolStripButton3_Click_1(sender As System.Object, e As System.EventArgs) Handles ToolStripButton3.Click
        Dim strResult As String
        Dim fBusqueda As New frmImportadorNominas

        fBusqueda.ShowDialog()

        If fBusqueda.DialogResult = Windows.Forms.DialogResult.OK Then
            strResult = fBusqueda.Valor

            If strResult <> "" Then
                dgNomina.Visible = True
                PreparaGrid()
                NominaDesdeArchivo(strResult)
            End If
        End If
    End Sub
    Sub NominaDesdeArchivo(ByVal NombreArchivo As String)
        Dim xl As Object
        Dim wb As Object

        'Crear objeto excel
        xl = CreateObject("Excel.Application")
        xl.Visible = False
        wb = xl.activeworkbook
        wb = xl.Workbooks.Open _
        (NombreArchivo, True, True, , "")

        ' wb.sheets(1).cells(i, 4).value

        lblStatus.Text = "Buscando registros..."
        Application.DoEvents()

        Dim Row As DataRow
        Dim Operador As Integer = 0
        Dim Primero As Boolean = True
        Dim Sueldo As Double = 0
        Dim Nombre As String = ""
        Dim Actual As Integer
        Dim SueldoNomina As Double = 0
        Dim dias As Integer = 0


        Dim DiferenciaSueldo As Double = 0
        Dim Precio As Double = 0
        Dim Vueltas As Decimal = 0

        'Variables globales para percepciones
        Dim SM_Zona_A As Double = BuscarDblDatoCitra("SELECT MONTO FROM SalariosMinimos WHERE ZONA='A'")
        Dim SM_Zona_C As Double = BuscarDblDatoCitra("SELECT MONTO FROM SalariosMinimos WHERE ZONA='C'")
        Dim SueldoDiario As Double = 62.33 * 3.5
        Dim Despensa As Double = 0
        Dim Total_Percepciones As Double = 0
        Dim Horas_Extras As Double = 0
        Dim CalculoExtras As Double = 0
        Dim Deporte As Double = 0
        Dim Puntualidad As Double = 0
        Dim Asistencia As Double = 0
        Dim Gratificacion As Double = 0

        'Variables para deducciones
        Dim BaseGravada As Double
        Dim LimInferior As Double
        Dim ExcLimInf As Double
        Dim PorcenLimInfe As Double
        Dim ImptoMarginal As Double
        Dim CuotaFija As Double
        Dim Cesantia As Double
        Dim Excedente38mf As Double = 27.9599
        Dim ImpRetener As Double
        Dim Impto As Double
        Dim Imss As Double
        Dim Invalidez As Double
        Dim Maternidad As Double
        Dim Medicos As Double
        Dim Subsidio As Double
        Dim PrestacionDinero As Double
        Dim PrestacionEspecie As Double
        Dim SDI As Double = 216.13
        Dim TotalDeducciones As Double = 0
        Dim TotalNeto As Double = 0
        Dim CargoBimestre As Double = 0
        Dim AbonoBimestre As Double = 0
        Dim RestaBimestre As Double = 0
        Dim DescuentoInfonavit As Double = 0
        Dim Porcentaje As Decimal = 0
        Dim DeduccionesVerificar As Double = 0
        Dim CargoMes As Double = 0
        Dim AbonoMes As Double = 0
        Dim RestaMes As Double = 0
        Dim DescuentoFonacot As Double = 0
        Dim TotalColumnas As Integer = dgNomina.Columns.Count
        Dim DescuentoDinamico As Integer = 0
        Dim MontoDescontado As Double = 0
        Dim FechaLiquidacion As Date = Now.AddDays(10)
        Dim FechaLiquidacionFormateada As String = ""
        Dim IDEmpleado As Integer = 0
        Dim CodigoEmpleado As String = 0
        Dim Tarjeta As Double
        Dim UltimoPeriodo As Integer = 0
        Dim IdFona As Integer = 0
        Dim IdInfo As Integer = 0
        Dim Serie As String = ""

        lblStatus.Text = "Preparando formulas..."
        Application.DoEvents()
        Primero = False

        BuscaInfonavit()
        BuscaFonacot()
        Dim DiasDescontarInfonavit As Decimal = 0
        Dim DiasDescontarFonacot As Decimal = 0

        'Prepara dias a descontar de Infonavit*******************************************************************************************
        Dim IdTipoPeriodo As Integer = BuscarIntDatoNominas("NOM10023", "IdTipoPeriodo", "NombreTipoPeriodo='" & lstPeriodos.Text.Trim & "'")
        Dim PeriodoInicialInfonavit As Integer = BuscarIntDatoCitra("PeriodoInfonavit", "Del", "Bimestre=" & txtInfonavit.Text)
        Dim PeriodoFinalInfonavit As Integer = BuscarIntDatoCitra("PeriodoInfonavit", "Al", "Bimestre=" & txtInfonavit.Text)
        Dim FechaInicialPeriodoInfFon As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & txtNomina.Text)
        If txtNomina.Text >= PeriodoInicialInfonavit And txtNomina.Text <= PeriodoFinalInfonavit Then
            Dim FechaInicialInfonavit As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoInicialInfonavit)
            Dim FechaFinalInfonavit As Date = BuscarDateDatoNominas("SELECT FechaFin FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoFinalInfonavit)
            Dim DiasTotalesDescuentoInf As Integer = DateDiff(DateInterval.Day, FechaInicialInfonavit, FechaFinalInfonavit)
            Dim DiasRestantesInfonavit As Integer = DateDiff(DateInterval.Day, FechaInicialPeriodoInfFon, FechaFinalInfonavit)
            DiasDescontarInfonavit = (DiasRestantesInfonavit * 35) / DiasTotalesDescuentoInf
        Else
            DiasDescontarInfonavit = 0
        End If


        'Prepara dias a descontar de fonacot********************************************************************************************
        Dim PeriodoInicialFonacot = BuscarIntDatoCitra("PeriodoFonacot", "Del", "Mes=" & txtFonacot.Text)
        Dim PeriodoFinalFonacot = BuscarIntDatoCitra("PeriodoFonacot", "Al", "Mes=" & txtFonacot.Text)
        If txtNomina.Text >= PeriodoInicialFonacot And txtNomina.Text <= PeriodoFinalFonacot Then
            Dim FechaInicialFonacot As Date = BuscarDateDatoNominas("SELECT FechaInicio FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoInicialFonacot)
            Dim FechaFinalFonacot As Date = BuscarDateDatoNominas("SELECT FechaFin FROM NOM10002 WHERE IdTipoPeriodo=" & IdTipoPeriodo & " AND Ejercicio=" & txtAnio.Text & " AND NumeroPeriodo=" & PeriodoFinalFonacot)
            Dim DiasTotalesDescuentoFon As Integer = DateDiff(DateInterval.Day, FechaInicialFonacot, FechaFinalFonacot)
            Dim DiasRestantesFonacot As Integer = DateDiff(DateInterval.Day, FechaInicialPeriodoInfFon, FechaFinalFonacot)
            DiasDescontarFonacot = (DiasRestantesFonacot * 15) / DiasTotalesDescuentoFon
        Else
            DiasDescontarFonacot = 0
        End If

        For W = 4 To 608
            If Operador <> BuscarIntDatoCitra("SELECT IdEmpleado FROM Empleados WHERE Codigo='" & wb.sheets(1).cells(W, 1).value & "'") Then
                If Sueldo > 0 Then
                    If Primero = False Then
                        'Calcula Sueldo*************************************
                        'If CodigoEmpleado = "01036" Then
                        'dias = 5
                        'ElseIf CodigoEmpleado = "01075" Then
                        'dias = 7
                        'End If
                        SueldoNomina = SueldoDiario * dias
                        If Sueldo <= SueldoDiario Then
                            SueldoNomina = Sueldo
                        ElseIf SueldoNomina > Sueldo Then
                            SueldoNomina = Sueldo
                        End If
                        DiferenciaSueldo = Sueldo - SueldoNomina
                        'Calcula Despensa***********************************
                        Despensa = (SM_Zona_A * 0.4) * 7
                        If DiferenciaSueldo < Despensa Then
                            Despensa = DiferenciaSueldo
                        ElseIf Despensa > DiferenciaSueldo Then
                            Despensa = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa)
                        'Calcula Horas Extras*******************************
                        CalculoExtras = ((((SM_Zona_A * 3.5) / 8) * 2) * 9)
                        If CalculoExtras < (SM_Zona_C * 5) Then
                            Horas_Extras = CalculoExtras
                        Else
                            Horas_Extras = SM_Zona_C * 5
                        End If
                        If DiferenciaSueldo < Horas_Extras Then
                            Horas_Extras = DiferenciaSueldo
                        ElseIf Horas_Extras > DiferenciaSueldo Then
                            Horas_Extras = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras)
                        'Calcula Deporte y Cultura**************************
                        Deporte = SueldoNomina * 0.1
                        If DiferenciaSueldo < Deporte Then
                            Deporte = DiferenciaSueldo
                        ElseIf Deporte > DiferenciaSueldo Then
                            Deporte = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte)
                        'Calcula premio de puntualidad**********************
                        Puntualidad = SueldoNomina * 0.1
                        If DiferenciaSueldo < Puntualidad Then
                            Puntualidad = DiferenciaSueldo
                        ElseIf Puntualidad > DiferenciaSueldo Then
                            Puntualidad = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad)
                        'Calcula premio de asistencia**********************
                        Asistencia = SueldoNomina * 0.1
                        If DiferenciaSueldo < Asistencia Then
                            Asistencia = DiferenciaSueldo
                        ElseIf Asistencia > DiferenciaSueldo Then
                            Asistencia = DiferenciaSueldo
                        End If
                        DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia)
                        'Calcula gratificacion*****************************
                        Gratificacion = DiferenciaSueldo

                        Total_Percepciones = SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia + Gratificacion
                        'Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
                        'Muestra valores*******************************************************************************************************

                        '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

                        'Calcula Tarjeta*****************************************
                        Tarjeta = 10 * dias
                        Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
                        'Calcula Infonavit*****************************************

                        If DiasDescontarInfonavit > 0 Then
                            CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                            AbonoBimestre = Infonavit(IDEmpleado)
                            RestaBimestre = CargoBimestre - AbonoBimestre
                            If RestaBimestre > 0 Then
                                'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                                DescuentoInfonavit = (RestaBimestre / DiasDescontarInfonavit) * dias '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                                If DescuentoInfonavit > RestaBimestre Then
                                    DescuentoInfonavit = RestaBimestre
                                End If
                                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                                If DeduccionesVerificar > Porcentaje Then
                                    DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                                    If DescuentoInfonavit < 0 Then
                                        DescuentoInfonavit = 0
                                    End If
                                End If
                            Else
                                DescuentoInfonavit = 0
                            End If
                        End If



                        'Calcula Fonacot******************************************
                        If DiasDescontarFonacot > 0 Then
                            CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
                            AbonoMes = Fonacot(IDEmpleado)
                            RestaMes = CargoMes - AbonoMes
                            UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)

                            If RestaMes > 0 Then
                                'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                                DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                                If DescuentoFonacot > RestaMes Then
                                    DescuentoFonacot = RestaMes
                                End If
                                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                                If DeduccionesVerificar > Porcentaje Then
                                    If DescuentoFonacot > 0 Then
                                        DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                                    End If
                                    If DescuentoFonacot < 0 Then
                                        DescuentoFonacot = 0
                                    End If
                                End If

                            Else
                                DescuentoFonacot = 0
                            End If
                        End If



                        'Imprime valores de columnas fijas*****************************************************
                        dgNomina.Rows.Add(Row)
                        Actual = dgNomina.Rows.Count - 1
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(0).Value = IDEmpleado
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(1).Value = CodigoEmpleado
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(2).Value = Nombre
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(3).Value = Sueldo
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(4).Value = dias
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(5).Value = SueldoNomina
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(6).Value = Despensa
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(7).Value = Horas_Extras
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(8).Value = Deporte
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(9).Value = Puntualidad
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(10).Value = Asistencia
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(11).Value = Gratificacion
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(12).Value = Total_Percepciones
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(13).Value = ImpRetener
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(14).Value = Tarjeta
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(15).Value = DescuentoInfonavit
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(16).Value = DescuentoFonacot
                        Application.DoEvents()

                        'Calcula descuentos dinamicos*****************************************************
                        MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                        If TotalColumnas > 19 Then
                            For i = 17 To dgNomina.Columns.Count - 3
                                DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                                DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                                If DeduccionesVerificar > Porcentaje Then
                                    DescuentoDinamico = Porcentaje - MontoDescontado
                                    If DescuentoDinamico < 0 Then
                                        DescuentoDinamico = 0
                                    End If
                                End If
                                MontoDescontado = MontoDescontado + DescuentoDinamico
                                dgNomina.Rows(Actual).Cells(i).Value = DescuentoDinamico
                                DescuentoDinamico = 0
                            Next
                        End If
                        TotalDeducciones = MontoDescontado
                        TotalNeto = Total_Percepciones - TotalDeducciones
                        dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
                        Application.DoEvents()
                        dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
                        Application.DoEvents()

                        'Limpia variables
                        Sueldo = 0
                        dias = 0
                        SueldoNomina = 0
                        Despensa = 0
                        DiferenciaSueldo = 0
                        Horas_Extras = 0
                        Deporte = 0
                        Puntualidad = 0
                        Asistencia = 0
                        Gratificacion = 0
                        Total_Percepciones = 0
                        BaseGravada = 0
                        LimInferior = 0
                        ExcLimInf = 0
                        PorcenLimInfe = 0
                        ImptoMarginal = 0
                        CuotaFija = 0
                        Cesantia = 0
                        ImpRetener = 0
                        Impto = 0
                        Imss = 0
                        Invalidez = 0
                        Maternidad = 0
                        Medicos = 0
                        Subsidio = 0
                        PrestacionDinero = 0
                        PrestacionEspecie = 0
                        TotalDeducciones = 0
                        TotalNeto = 0
                        FechaLiquidacion = Now.AddDays(10)
                        FechaLiquidacionFormateada = ""
                        UltimoPeriodo = 0
                    End If
                    'Primero = False
                Else
                    'Limpia variables
                    Sueldo = 0
                    dias = 0
                    SueldoNomina = 0
                    Despensa = 0
                    DiferenciaSueldo = 0
                    Horas_Extras = 0
                    Deporte = 0
                    Puntualidad = 0
                    Asistencia = 0
                    Gratificacion = 0
                    Total_Percepciones = 0
                    BaseGravada = 0
                    LimInferior = 0
                    ExcLimInf = 0
                    PorcenLimInfe = 0
                    ImptoMarginal = 0
                    CuotaFija = 0
                    Cesantia = 0
                    ImpRetener = 0
                    Impto = 0
                    Imss = 0
                    Invalidez = 0
                    Maternidad = 0
                    Medicos = 0
                    Subsidio = 0
                    PrestacionDinero = 0
                    PrestacionEspecie = 0
                    TotalDeducciones = 0
                    TotalNeto = 0
                    FechaLiquidacion = Now.AddDays(10)
                    FechaLiquidacionFormateada = ""
                    UltimoPeriodo = 0
                End If
            End If
            Operador = BuscarIntDatoCitra("SELECT IdEmpleado FROM Empleados WHERE Codigo='" & wb.sheets(1).cells(W, 1).value & "'")
            CodigoEmpleado = wb.sheets(1).cells(W, 1).value
            IDEmpleado = BuscarIntDatoCitra("Empleados", "IDEmpleado", "Codigo='" & CodigoEmpleado.ToString.Trim & "'")
            Nombre = Trim(BuscarStrDatoCitra("Empleados", "NombreCompleto", "Codigo='" & CodigoEmpleado & "'"))
            lblStatus.Text = "Calculando nomina de " & Nombre & "..."
            Application.DoEvents()
            Serie = wb.sheets(1).cells(W, 4).value
            'IDRuta = BuscarIntDato("MGW10002", "CIDVALOR01", "CIDCLIEN01=" & rdBuscar("CIDCLIEN01"))
            Precio = BuscarDblDatoCitra("PrecioVueltas", "PRECIO", "ABRE='" & Serie.Trim & "'")
            Vueltas = wb.sheets(1).cells(W, 5).value

            Sueldo = Sueldo + (Vueltas * Precio)
            If FechaLiquidacionFormateada <> Format(CDate(wb.sheets(1).cells(W, 3).value.ToString).Year, "0000") & Format(CDate(wb.sheets(1).cells(W, 3).value.ToString).Month, "00") & Format(CDate(wb.sheets(1).cells(W, 3).value.ToString).Day, "00") Then
                dias = dias + 1
            End If
            FechaLiquidacion = wb.sheets(1).cells(W, 3).value
            FechaLiquidacionFormateada = Format(CDate(FechaLiquidacion).Year, "0000") & Format(CDate(FechaLiquidacion).Month, "00") & Format(CDate(FechaLiquidacion).Day, "00")
            'If CodigoEmpleado = "01164" Then
            'MsgBox("Nombre:" & Nombre & ", Dias;" & dias & ",fecha formateada:" & FechaLiquidacionFormateada, MsgBoxStyle.Information, "Aviso")
            'End If
        Next
        If Sueldo > 0 Then
            'Calcula Sueldo*************************************
            SueldoNomina = SueldoDiario * dias
            If Sueldo <= SueldoDiario Then
                SueldoNomina = Sueldo
            ElseIf SueldoNomina > Sueldo Then
                SueldoNomina = Sueldo
            End If
            DiferenciaSueldo = Sueldo - SueldoNomina
            'Calcula Despensa***********************************
            Despensa = (SM_Zona_A * 0.4) * 7
            If DiferenciaSueldo < Despensa Then
                Despensa = DiferenciaSueldo
            ElseIf Despensa > DiferenciaSueldo Then
                Despensa = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa)
            'Calcula Horas Extras*******************************
            CalculoExtras = ((((SM_Zona_A * 3.5) / 8) * 2) * 9)
            If CalculoExtras < (SM_Zona_C * 5) Then
                Horas_Extras = CalculoExtras
            Else
                Horas_Extras = SM_Zona_C * 5
            End If
            If DiferenciaSueldo < Horas_Extras Then
                Horas_Extras = DiferenciaSueldo
            ElseIf Horas_Extras > DiferenciaSueldo Then
                Horas_Extras = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras)
            'Calcula Deporte y Cultura**************************
            Deporte = SueldoNomina * 0.1
            If DiferenciaSueldo < Deporte Then
                Deporte = DiferenciaSueldo
            ElseIf Deporte > DiferenciaSueldo Then
                Deporte = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte)
            'Calcula premio de puntualidad**********************
            Puntualidad = SueldoNomina * 0.1
            If DiferenciaSueldo < Puntualidad Then
                Puntualidad = DiferenciaSueldo
            ElseIf Puntualidad > DiferenciaSueldo Then
                Puntualidad = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad)
            'Calcula premio de asistencia**********************
            Asistencia = SueldoNomina * 0.1
            If DiferenciaSueldo < Asistencia Then
                Asistencia = DiferenciaSueldo
            ElseIf Asistencia > DiferenciaSueldo Then
                Asistencia = DiferenciaSueldo
            End If
            DiferenciaSueldo = Sueldo - (SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia)
            'Calcula gratificacion*****************************
            Gratificacion = DiferenciaSueldo

            Total_Percepciones = SueldoNomina + Despensa + Horas_Extras + Deporte + Puntualidad + Asistencia + Gratificacion

            'Muestra valores*******************************************************************************************************

            '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

            'Calcula Tarjeta*****************************************
            Tarjeta = 10 * dias

            Porcentaje = Total_Percepciones * ((BuscarDblDatoCitra("Empleados", "PorcentajeDescuento", "IdEmpleado=" & IDEmpleado)) * 0.01)
            'Muestra valores*******************************************************************************************************

            '////////////////////////////CALCULO DE DEDUCCIONES////////////////////////////////////////////////////////////////////

            'CALCULA ISR **********************************************************************************************************

            'Calcula Infonavit*****************************************

            CargoBimestre = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosInfonavit WHERE IdEmpleado=" & IDEmpleado & " AND Bimestre=" & txtInfonavit.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
            AbonoBimestre = Infonavit(IDEmpleado)
            RestaBimestre = CargoBimestre - AbonoBimestre
            If RestaBimestre > 0 Then
                'IdInfo = BuscarIntDato("SELECT max(CIDINFO) as cidinfo FROM MGWINFONAVIT WHERE CIDEMPLEAD=" & IDEmpleado & " AND cBimestre=" & txtInfonavit.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                DescuentoInfonavit = (RestaBimestre / DiasDescontarInfonavit) * dias '(CargoBimestre / (BuscarDblDato("SELECT cDias FROM MGWINFONAVIT WHERE CIDINFO=" & IdInfo))) * dias
                If DescuentoInfonavit > RestaBimestre Then
                    DescuentoInfonavit = RestaBimestre
                End If
                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + Tarjeta
                If DeduccionesVerificar > Porcentaje Then
                    DescuentoInfonavit = Porcentaje - (ImpRetener + Imss)
                    If DescuentoInfonavit < 0 Then
                        DescuentoInfonavit = 0
                    End If
                End If
            Else
                DescuentoInfonavit = 0
            End If


            'Calcula Fonacot******************************************
            CargoMes = BuscarDblDatoCitra("SELECT SUM(Monto) AS CMONTO FROM CargosFonacot WHERE IdEmpleado=" & IDEmpleado & " AND Mes=" & txtFonacot.Text & " AND YEAR(Fecha)=" & txtAnio.Text)
            AbonoMes = Fonacot(IDEmpleado)
            RestaMes = CargoMes - AbonoMes
            UltimoPeriodo = BuscarIntDatoCitra("SELECT AL FROM PeriodoFonacot WHERE Mes=" & txtFonacot.Text & " AND Anio=" & txtAnio.Text)

            If RestaMes > 0 Then
                'IdFona = BuscarIntDato("SELECT max(CIDFONA) as cidfona FROM MGWFONACOT WHERE CIDEMPLEAD=" & IDEmpleado & " AND CMES=" & txtFonacot.Text & " AND YEAR(CFECHA)=" & txtAnio.Text)
                DescuentoFonacot = (RestaMes / DiasDescontarFonacot) * dias '(CargoMes / (BuscarDblDato("SELECT cDias FROM MGWFONACOT WHERE CIDFONA=" & IdFona))) * dias
                If DescuentoFonacot > RestaMes Then
                    DescuentoFonacot = RestaMes
                End If
                DeduccionesVerificar = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot + Tarjeta
                If DeduccionesVerificar > Porcentaje Then
                    If DescuentoFonacot > 0 Then
                        DescuentoFonacot = Porcentaje - (ImpRetener + Imss + DescuentoInfonavit)
                    End If
                    If DescuentoFonacot < 0 Then
                        DescuentoFonacot = 0
                    End If
                End If

            Else
                DescuentoFonacot = 0
            End If


            'Imprime valores de columnas fijas*****************************************************
            dgNomina.Rows.Add(Row)
            Actual = dgNomina.Rows.Count - 1
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(0).Value = IDEmpleado
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(1).Value = CodigoEmpleado
            Application.DoEvents()
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(2).Value = Nombre
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(3).Value = Sueldo
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(4).Value = dias
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(5).Value = SueldoNomina
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(6).Value = Despensa
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(7).Value = Horas_Extras
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(8).Value = Deporte
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(9).Value = Puntualidad
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(10).Value = Asistencia
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(11).Value = Gratificacion
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(12).Value = Total_Percepciones
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(13).Value = ImpRetener
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(14).Value = Tarjeta
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(15).Value = DescuentoInfonavit
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(16).Value = DescuentoFonacot
            Application.DoEvents()


            'Calcula descuentos dinamicos*****************************************************
            MontoDescontado = ImpRetener + Imss + DescuentoInfonavit + DescuentoFonacot
            If TotalColumnas > 19 Then
                For i = 17 To dgNomina.Columns.Count - 3
                    DescuentoDinamico = Monto_Descuento(dgNomina.Columns(i).HeaderText.ToString.Trim, IDEmpleado, dias)
                    DeduccionesVerificar = MontoDescontado + DescuentoDinamico
                    If DeduccionesVerificar > Porcentaje Then
                        DescuentoDinamico = Porcentaje - MontoDescontado
                    End If
                    MontoDescontado = MontoDescontado + DescuentoDinamico
                    dgNomina.Rows(Actual).Cells(i).Value = DescuentoDinamico

                    DescuentoDinamico = 0
                Next
            End If

            TotalDeducciones = MontoDescontado
            TotalNeto = Total_Percepciones - TotalDeducciones

            dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 2).Value = TotalDeducciones
            Application.DoEvents()
            dgNomina.Rows(Actual).Cells(dgNomina.Columns.Count - 1).Value = TotalNeto
            Application.DoEvents()

            'Limpia variables
            Sueldo = 0
            dias = 0
            SueldoNomina = 0
            Despensa = 0
            DiferenciaSueldo = 0
            Horas_Extras = 0
            Deporte = 0
            Puntualidad = 0
            Asistencia = 0
            Gratificacion = 0
            Total_Percepciones = 0

            BaseGravada = 0
            LimInferior = 0
            ExcLimInf = 0
            PorcenLimInfe = 0
            ImptoMarginal = 0
            CuotaFija = 0
            Cesantia = 0
            ImpRetener = 0
            Impto = 0
            Imss = 0
            Invalidez = 0
            Maternidad = 0
            Medicos = 0
            Subsidio = 0
            PrestacionDinero = 0
            PrestacionEspecie = 0
            TotalDeducciones = 0
            TotalNeto = 0

        End If

        Dim Contador As Integer = dgNomina.Rows.Count
        If Contador = 0 Then
            Dim Cols As Integer = dgNomina.Columns.Count - 1
            If Cols > 17 Then
                Do While Cols <> 17
                    dgNomina.Columns.RemoveAt(dgNomina.Columns(Cols).Index)
                    Cols = Cols - 1
                Loop
            End If
            dgNomina.Visible = False
            lblStatus.Text = "No hay registros para procesar"
            Exit Sub
        End If

        wb.Close(SaveChanges:=False)
        xl.Quit()

        lblStatus.Text = "La nómina se ha calculado correctamente"
        Application.DoEvents()
    End Sub
    Private Sub ToolStripButton6_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton6.Click
        Dim Respuesta As Integer = MsgBox("Este proceso eliminara la nomina actual de NomiPAQ, ¿Desea continuar?", MsgBoxStyle.YesNo, "Aviso")
        If Respuesta <> 6 Then
            Exit Sub
        End If

        Dim IdTipoPeriodo As Integer = BuscarIntDatoNominas("NOM10023", "IdTipoPeriodo", "NombreTipoPeriodo='" & lstPeriodos.Text & "'")
        Dim IdPeriodo As Integer = BuscarIntDatoNominas("NOM10002", "IdPeriodo", "IdTipoPeriodo=" & IdTipoPeriodo & " AND NumeroPeriodo=" & txtNomina.Text & " AND Ejercicio=" & txtAnio.Text)

        Call SetSqlNominas("Delete from NOM10008 WHERE IDPERIODO=" & IdPeriodo)
        MsgBox("Datos eliminados correctamente, ahora puede enviar nuevamente la nomina a NomiPAQ", MsgBoxStyle.Information, "Aviso")
    End Sub

    Private Sub dgNomina_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgNomina.CellContentClick

    End Sub

    Private Sub txtNomina_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNomina.TextChanged

    End Sub
End Class